GCD (Serial, Concurrent, Main Dispatch Queue)
基本名詞解釋:
Serial vs Concurrent
這兩個名詞有反義的概念,主要是在描述當每項工作(task)被執行時,跟其他工作之間的關係。
Serial(照順序去做排列):serial queues 的意思就是這個佇列裡的工作是按照順序執行的,一次只執行一個,當前一個執行完後,才會執行下一個。serial queues 適合拿來處理一個 APP 專案中需要共享的資源,因為這樣可以確保該存取是有依照順序來的。
Concurrent(同時進行的):concurrent queues 代表這個 queues 裡的 task 會按順序開始執行,但因為是 concurrent ,所以不必等上一個工作執行完才繼續執行下一個,因此每個工作執行結果的時間是無法精準預測的。
Synchronous vs Asynchronous
這兩個名詞有反義的概念,主要是在描述一個 function 回傳 data 的行為。
Synchronous(同步)
一個 synchronous 的 function 只有在完成裡面的工作後,才會回傳值。
Asynchronous(非同步)
Asynchronous function 裡的工作會按照順序執行,但這個 function 不會等其它的動作執行完,它執行完後會馬上回傳值,因此 asynchronous function 不會造成它所在的 Thread 阻塞。
- 透過 DispatchQueue.main 來取得 Main Thread 的使用權,在 Block 裡面即可寫入我們想要做的事,在實務上通常被用來更新 UI,因 UI 的更新只能在 Main Thread。